home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / comm / bbs / ChkAmCD101.lha / ChkCD.rexx < prev   
OS/2 REXX Batch file  |  1996-09-07  |  4KB  |  142 lines

  1. /* ChkCD.rexx */
  2.  
  3. /* By Gnome (John Marchant)
  4.    Fidonet: 2:2500/167.15
  5.    Moonlight BBS, Bedford UK. +44 1234 212752
  6.       Open 6pm to 8am ONLY, including weekends.
  7.       Fax, netmail & Freq accepted during open hours.
  8.  
  9.    Usage: Load Aminet CD in drive CD0:
  10.           rx ChkCD [f/?]
  11.           (argument f causes report to be copied to file ram:CDcheck)   
  12.           (argument ? only displays purpose of program)
  13.  
  14.    This program is public domain & carries no warranty
  15. */
  16.  
  17. /* 
  18. $VER: ChkCD.rexx 1.01 (07 Sep 1996) by Gnome
  19. */
  20.  
  21. options results
  22.  
  23. /*
  24. call open('STDERR','rad:tracefile','w')
  25. trace results
  26. */
  27.  
  28. arg tofile
  29.  
  30. if tofile = '?' then do
  31.   say
  32.   say 'This arexx program has 2 phases:'
  33.   say '1. It scans CD0:aminet/TREE, and checks that all directories'
  34.   say '   listed in TREE exist on the CD, and are not empty.'
  35.   say
  36.   say '2. It scans CD0:aminet/INDEX, and checks that all directories'
  37.   say '   and files listed in INDEX do in fact exist.'
  38.   say 
  39.   say 'Missing files or directories, and empty directories are reported'
  40.   say 'on screen. If argument ''f'' is supplied, the report is also'
  41.   say 'written to RAM:CDcheck.  e.g. rx ChkCD f'
  42.   say
  43.   say 'The program may be stopped at any time with Ctrl-C.'
  44.   say
  45.   exit 0
  46. end
  47.  
  48. If ~Show('L','rexxsupport.library') Then Do
  49.     If ~AddLib('rexxsupport.library',0,-30,0) Then Do
  50.        print 'RexxSupport.Library missing! Can''t continue...'
  51.        Exit 10
  52.     End
  53. End
  54.  
  55. if open('tr','CD0:aminet/TREE','r')=0 then do
  56.   say 'Can''t open CD0:aminet/TREE. Sure the right CD is loaded in CD0?'
  57.   say
  58.   exit 20
  59. end
  60.  
  61. report=0
  62. if upper(tofile)='F' then do
  63.   call open('op','ram:CDcheck','w')
  64.   list=showlist('V')       /* Identify CD name, for report title */
  65.   x=index(list,'AMINET')
  66.   if x>0 then do
  67.     y=substr(list,x)
  68.     z=word(y,1)
  69.     call writeln('op','Check on CD '||z||' on '||date()) /* Report title */
  70.     call writeln('op','')
  71.   end
  72.   report=1
  73. end
  74.  
  75. do while ~eof('tr')
  76.   line = readln('tr')
  77.   if line = '' | left(line,1)=' ' then iterate
  78.   first = trim(word(line,1))
  79.   uf = upper(first)
  80.   if uf='NEW' | uf='PRIV' | uf='RECENT' then iterate
  81.   if index(first,'/')=0 then iterate
  82.  
  83.   if ~exists('CD0:aminet/'||first) then do
  84.     hold='Directory Aminet/'||uf||' does not exist'
  85.     say hold
  86.     if report=1 then call writeln('op',hold)
  87.     iterate
  88.   end
  89.  
  90.   comline = 'list >ram:test '||'CD0:aminet/'||first
  91.   address command comline
  92.   call open('rt','ram:test','r')
  93.   t=readln('rt')
  94.   call close('rt')
  95.   if index(t,'empty')>0 then do
  96.     hold='Directory Aminet/'||first||' is empty'
  97.     say hold
  98.     if report=1 then call writeln('op',hold)
  99.     iterate
  100.   end
  101. end
  102. call close('tr')
  103. call delete('ram:test')
  104.  
  105. say
  106. say 'TREE checked. Now checking INDEX.'
  107. say
  108.  
  109. if open('ind','CD0:aminet/INDEX','r')=0 then do
  110.   say 'Can''t open CD0:aminet/INDEX. Abandoning run'
  111.   say
  112.   exit 20
  113. end
  114.  
  115. do while ~eof('ind')
  116.   line = readln('ind')
  117.   if line = '' | left(line,1)='|' | left(line,1)=' ' then iterate
  118.   fname = strip(word(line,1))
  119.   fpath = strip(word(line,2))
  120.   fullpath = 'CD0:aminet/'||fpath
  121.  
  122.   if ~exists(fullpath) then do
  123.     hold='Directory Aminet/'||fpath||' does not exist'
  124.     say hold
  125.     if report=1 then call writeln('op',hold)
  126.     iterate
  127.   end
  128.   file = fullpath||'/'||fname
  129.   if ~exists(file) then do
  130.     hold='File '||fpath||'/'||fname||' does not exist'
  131.     say hold
  132.     if report=1 then call writeln('op',hold)
  133.     iterate
  134.   end
  135. end
  136. call close('ind')
  137. if report=1 then call close('op')
  138. say
  139. say 'End of check.'
  140. if report=1 then say 'Report is on file ram:CDcheck'
  141. say
  142.